package cn.bdqn.service.impl;

import cn.bdqn.domain.Group;
import cn.bdqn.mapper.GroupMapper;
import cn.bdqn.mapper.UserMapper;
import cn.bdqn.service.GroupService;
import cn.bdqn.utils.result.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @Author Wang-Hao
 * @create 2020/8/21 16:07
 */
@Service("GroupService")
public class GroupServiceImpl implements GroupService {

    /**
     * 机构mapper
     */
    @Autowired
    private GroupMapper groupMapper;

    /**
     * 机构用户mapper
     */
    @Autowired
    private UserMapper userMapper;

    /**
     * 根据机构id查询机构信息
     * @param groupId
     * @return
     */
    @Override
    public Group selectGroupInfoById(Integer groupId) {
        // 调用mapper层的根据id查询信息的方法
        return groupMapper.selectByPrimaryKey(groupId);
    }

    /**
     * 查询全部机构信息
     * @param pageNum   当前页码
     * @param pageAmount    每页条数
     * @return
     */
    @Override
    public Page selectGroupInfoAll(Integer pageNum, Integer pageAmount){

        //开始分页
        PageHelper.startPage(pageNum>0?pageNum:1,pageAmount);
        //获取全部机构信息
        List<Group> list = groupMapper.selectAllInfo();
        //分页
        PageInfo<Group> coursePageInfo = new PageInfo<Group>(list);
        //封装分页的信息
        Page page = new Page();
        page.setMenuList(coursePageInfo.getList());
        page.setTotalRecord((int)coursePageInfo.getTotal());

        return page;
    }

    /**
     *根据机构名称或机构类型或地址查询全部机构信息
     * @param groupName    机构名称
     * @param groupTypeId   机构类型
     * @param address       地址
     * @param pageNum   当前页码
     * @param pageAmount    每页条数
     * @return
     */
    @Override
    public Page selectGroupInfoByGroupName(String groupName, Integer groupTypeId, String address, Integer pageNum, Integer pageAmount) {
        //开始分页
        PageHelper.startPage(pageNum>0?pageNum:1,pageAmount);
        //获取全部机构信息
        List<Group> list = groupMapper.selectAllInfoByGroupName(groupName,groupTypeId,address);
        //分页
        PageInfo<Group> coursePageInfo = new PageInfo<Group>(list);
        //封装分页的信息
        Page page = new Page();
        page.setMenuList(coursePageInfo.getList());
        page.setTotalRecord((int)coursePageInfo.getTotal());
        return page;
    }

    /**
     * 添加机构信息
     * @param group
     */
    @Override
    public void addGroupInfo(Group group){
        // 将机构状态默认设置成可以
        group.setState(0);
        // 调用mapper层的添加方法
        groupMapper.insertSelective(group);

    }

    /**
     * 修改机构信息
     * @param group
     */
    @Override
    public void updateGroupInfo(Group group){
        //调用mapper层的修改方法
        groupMapper.updateByPrimaryKeySelective(group);
    }

    /**
     * 根据groupId逻辑删除group信息
     * @param groupId
     */
    @Override
    public void deleteGroupInfoByGroupId(Integer groupId){

        // 调用userMapper层的方法，在删除机构前将机构用户删除
        userMapper.deleteByGroupId(groupId);
        // 调用groupMapper层的方法，逻辑删除机构
        groupMapper.updateGroupStateByGroupId(groupId);

    }

}
